home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0257 / demo.exe / EXTDOS.DEM < prev    next >
Text File  |  1992-02-16  |  17KB  |  707 lines

  1. ; ----------------------------
  2. ; EXTDOS.DEM   - Demoprogramm für die Routinen aus EXTDOS_.LIB und EXTDOS.MAB
  3. ;                (für den A86)
  4. ;
  5. ;                (c) Bernd Schemmer 1990 - 1992
  6. ;                Letzter Update: 15.02.1992
  7. ;
  8. ; Übersetzen:
  9. ;  A86 MACROS.MAC EXTDOS.MAB EXTDOS.DEM EXTDOS.LIB DEMOS.INC TO EXTDOS_.COM
  10. ; ---------------------------
  11.  
  12.          jmp start            ; Daten überspringen
  13.  
  14. logo  db CR,LF
  15.       db 'EXTDOS.DEM  - Demoprogramm für die Routinen aus EXTDOS.LIB und EXTDOS.MAB'
  16.       db CR,LF
  17.       db '-------------------------------------------------------------------------'
  18.       db CR,LF
  19.       db CR,LF
  20. GETLENGTH logo
  21.  
  22. start:
  23.          call ShowLogo        ; Logo ausgeben und Speicherblock verkleinern
  24.  
  25.          TestDOSVersion       ; DOS-Version überprüfen
  26.  
  27.          call CheckSTDIN_STDOUT
  28.  
  29.          call ShowHandleTab
  30.          call ExpandHandleTab
  31.          jc >l1               ; Fehler
  32.          call ShowHandleTab
  33. l1:
  34.          call ShowPause
  35.          jc Ende
  36.  
  37.          call ShowConfigData
  38.          call ShowPause
  39.          jc Ende
  40.  
  41.          call ShowLogLws
  42.          call ShowPause
  43.          jc Ende
  44.  
  45.          call ShowDevices
  46.  
  47.          call ShowDPBs
  48.          call ShowPause
  49.          jc Ende
  50.  
  51.          call ShowMisc
  52.          call ShowPause
  53.          jc Ende
  54.  
  55.          call ShowMCBS
  56.  
  57. ; Die folgenden Routinen werden nur unter DOS 4+ ausgeführt:
  58. ;
  59.          call ShowSCBs
  60.  
  61.          call ShowDOS4xxBufferData
  62.  
  63. Ende:
  64.          EndProcess 0
  65.  
  66. ; ----------------------------
  67. ; ShowDOS4xxBufferData
  68. ;
  69. ; Funktion:  Ausgabe der Strukturen für die Puffer-Verwaltung
  70. ;            unter DOS 4.xx
  71. ;
  72. DOS4xxBufferDataMSG db CR,LF
  73.                     db 'Adresse des Puffer-Info-Blocks: '
  74. l013                db 'xxxx:xxxx',CR,LF
  75.                     db 'Adresse des Hash-Chain-Arrays: '
  76. l014                db 'xxxx:xxxx',CR,LF
  77.                     db 'Anzahl Einträge im Hash-Chain-Array: '
  78. l015                db 'xxxxh',CR,LF
  79.                     db 'Adresse der Look-Ahead-Puffer: '
  80. l016                db 'xxxx:xxxx',CR,LF
  81.                     db 'Anzahl der Look-Ahead-Puffer: '
  82. l017                db 'xxxxh',CR,LF
  83. GETLENGTH DOS4xxBufferDataMSG
  84.  
  85. ShowDOS4xxBufferData:
  86.          mov ah,030h
  87.          int 021h
  88.          cmp al,04
  89.          je >l1
  90.          ret                  ; falsche DOS-Version
  91. l1:
  92.          call ShowPause
  93.          jc ret
  94.  
  95.          GetPIBAdress
  96.          mov ax,es
  97.          mov es,cs
  98.          mov di,offset l013
  99.          call Konvert_AX_To_Hexstring
  100.          mov ax,bx
  101.          inc di
  102.          call Konvert_AX_To_Hexstring
  103.  
  104.          GetHashChainAdress
  105.          mov ax,es
  106.          mov es,cs
  107.          mov di,offset l014
  108.          call Konvert_AX_To_Hexstring
  109.          mov ax,bx
  110.          inc di
  111.          call Konvert_AX_To_Hexstring
  112.          mov ax,cx
  113.          mov di,offset l015
  114.          call Konvert_AX_To_Hexstring
  115.  
  116.          GetLookAheadAdress
  117.          mov ax,es
  118.          mov es,cs
  119.          mov di,offset l016
  120.          call Konvert_AX_To_Hexstring
  121.          mov ax,bx
  122.          inc di
  123.          call Konvert_AX_To_Hexstring
  124.          mov ax,cx
  125.          mov di,offset l017
  126.          call Konvert_AX_To_Hexstring
  127.  
  128.          WRITE_STRING DOS4xxBufferDataMSG
  129.          ret
  130.  
  131. ; ----------------------------
  132. ; ShowSCBs
  133. ;
  134. ; Funktion:  Ausgabe der SCBs (nur DOS 4+)
  135. ;
  136. SCBMsg db CR,LF
  137.        db 'Akt. SCB-Daten: '
  138.        db CR,LF
  139.        db CR,LF
  140.        db '  Adresse     Seg.   Länge (in Paragraphen)   ID'
  141.        db CR,LF
  142.        db '------------------------------------------------'
  143.        db CR,LF
  144. GETLENGTH SCBMsg
  145.  
  146. SCBLine    db 'xxxx:xxxx   '
  147. _SCBMainSeg db            'xxxxh    '
  148. _SCBLength db                      'xxxxh               '
  149. _SCBID     db                                          'x  '
  150.            db CR,LF
  151. GETLENGTH SCBLine
  152.  
  153. ShowSCBs:
  154.          mov ah,030h
  155.          int 021h
  156.          cmp al,03
  157.          ja >l1
  158.          ret
  159. l1:
  160.          WRITE_STRING SCBMsg
  161.          GetFirstSCBAdress    ; ES:BX -> 1. SCB
  162.  
  163. l0:
  164.          push es,bx           ; Adresse des akt. SCB sichern
  165.  
  166.          push es:SCB_MainSegment
  167.          push es:MCB_BLock_Length
  168.  
  169.          mov al,es:SCB_ID_BYTE
  170.          mov cs:_SCBID,al
  171.          mov ax,es
  172.          mov es,cs            ; ES = CS
  173.          mov di,offset SCBLINE
  174.          call Konvert_AX_To_Hexstring
  175.          mov ax,bx
  176.          inc di
  177.          call Konvert_AX_To_Hexstring
  178.  
  179.          pop ax
  180.          mov di,offset _SCBLength
  181.          call Konvert_AX_To_Hexstring
  182.  
  183.          pop ax
  184.          mov di,offset _SCBMainSeg
  185.          call Konvert_AX_To_Hexstring
  186.  
  187.          WRITE_STRING SCBLine
  188.          pop bx,es
  189.          GetNextSCBAdress
  190.          jnz l0
  191.  
  192.          mov es,cs
  193.          ret
  194.  
  195. ; ----------------------------
  196. ; ShowDPBs
  197. ;
  198. ; Funktion:  Ausgabe der DPBs
  199. ;
  200. DPBMsg db CR,LF
  201.        db 'Akt. DPB-Daten: '
  202.        db CR,LF
  203. GETLENGTH DPBMsg
  204.  
  205. DPBLine db
  206.         db 'xxx. DPB: bei '
  207. l017    db               'xxxx:xxxx',CR,LF
  208. GETLENGTH DPBLine
  209.  
  210. ShowDPBs:
  211.          WRITE_STRING DPBMsg
  212.  
  213.          GetFirstDPB          ; ES:BX -> 1. DPB
  214.          mov cx,1             ; CX = Zähler
  215.  
  216. l0:
  217.          push es,bx           ; Adresse des akt. DPB sichern
  218.  
  219.          mov ax,es
  220.          mov es,cs            ; ES = CS
  221.          mov di,offset l017
  222.          call Konvert_AX_To_Hexstring
  223.          mov ax,bx
  224.          inc di
  225.          call Konvert_AX_To_Hexstring
  226.          mov ax,cx
  227.          mov di,offset DPBLine
  228.          call Konvert_AL_To_Dezstring
  229.  
  230.          inc cx
  231.          push cx
  232.          WRITE_STRING DPBLine
  233.          pop cx
  234.  
  235.          pop bx,es
  236.          GetNextDPB
  237.          jnz l0
  238.  
  239.          mov es,cs
  240.          ret
  241.  
  242. ; ----------------------------
  243. ; ShowMisc
  244. ;
  245. ; Funktion:  Ausgabe verschiedener undokumentierter DOS-Werte
  246. ;
  247. ShowMiscMSG db CR,LF
  248.             db 'Verschiedene undokumentierte DOS-Werte: '
  249.             db CR,LF
  250.             db 'Switch-Character: '
  251. l010        db 'x',CR,LF
  252.             db 'Adresse des DOS-Busy-Flags: '
  253. l011        db 'xxxx:xxxx',CR,LF
  254.             db 'Adresse des Critical-Error-Flags: '
  255. l012        db 'xxxx:xxxx',CR,LF
  256. GETLENGTH ShowMiscMSG
  257.  
  258. ShowMisc:
  259.          mov al,0
  260.          GetSetSwitchChar
  261.          mov cs:L010,dl
  262.  
  263.          GetBusyFlagAdress
  264.          mov ax,es
  265.          mov es,cs
  266.          mov di,offset l011
  267.          call Konvert_AX_To_Hexstring
  268.          mov ax,bx
  269.          inc di
  270.          call Konvert_AX_To_Hexstring
  271.  
  272.          GetCriticalErrorFlagAdress
  273.  
  274.          mov ax,es
  275.          mov es,cs
  276.          mov di,offset l012
  277.          call Konvert_AX_To_Hexstring
  278.          mov ax,bx
  279.          inc di
  280.          call Konvert_AX_To_Hexstring
  281.  
  282.          WRITE_STRING ShowMiscMSG
  283.          ret
  284.  
  285. ; ----------------------------
  286. ; ShowMCBs
  287. ;
  288. ; Funktion:  Ausgabe der MCBs
  289. ;
  290. MCBMsg db CR,LF
  291.        db 'Akt. MCB-Daten: '
  292.        db CR,LF
  293.        db CR,LF
  294.        db '  Adresse     PSP    Länge (in Paragraphen)'
  295.        db CR,LF
  296.        db '-------------------------------------------'
  297.        db CR,LF
  298. GETLENGTH MCBMsg
  299.  
  300. MCBLine    db 'xxxx:xxxx   '
  301. _MCBPSP    db             'xxxxh    '
  302. _MCBLength db                      'xxxxh                 '
  303.            db CR,LF
  304. GETLENGTH MCBLine
  305.  
  306. ShowMCBs:
  307.          WRITE_STRING MCBMsg
  308.          GetFirstMCBAdress    ; ES:BX -> 1. MCB
  309.  
  310. l0:
  311.          push es,bx           ; Adresse des akt. MCB sichern
  312.  
  313.          push es:MCB_PSP_Segment
  314.          push es:MCB_BLock_Length
  315.  
  316.          mov ax,es
  317.          mov es,cs            ; ES = CS
  318.          mov di,offset MCBLINE
  319.          call Konvert_AX_To_Hexstring
  320.          mov ax,bx
  321.          inc di
  322.          call Konvert_AX_To_Hexstring
  323.  
  324.          pop ax
  325.          mov di,offset _MCBLength
  326.          call Konvert_AX_To_Hexstring
  327.  
  328.          pop ax
  329.          mov di,offset _MCBPSP
  330.          call Konvert_AX_To_Hexstring
  331.  
  332.          WRITE_STRING MCBLine
  333.          pop bx,es
  334.          GetNextMCBAdress
  335.          jnz l0
  336.  
  337.          mov es,cs
  338.          ret
  339.  
  340. ; ----------------------------
  341. ; ShowDevices
  342. ;
  343. ; Funktion:  Ausgabe der Daten des CON- und des NUL-Devices
  344. ;
  345. ConDeviceName db 'CON     '
  346. NulDeviceName db 'NUL     '
  347.  
  348. ShowDeviceMSG0 db CR,LF
  349.                db 'Ermittle die Daten des CON- und des NUL-Devices'
  350.                db CR,LF
  351. GETLENGTH ShowDeviceMSG0
  352.  
  353. ShowDeviceMSG1 db CR,LF
  354.               db 'Daten des CON-Devices: '
  355.               db CR,LF
  356.               db 'Adresse des Device-Headers: '
  357. l001          db 'xxxx:xxxx'
  358.               db CR,LF
  359.               db 'Attribut des Devices:       '
  360. l002          db 'xxxxh'
  361.               db CR,LF
  362. GETLENGTH ShowDeviceMSG1
  363.  
  364. ShowDeviceMSG2 db CR,LF
  365.               db 'Daten des NUL-Devices: '
  366.               db CR,LF
  367.               db 'Adresse des Device-Headers: '
  368. l003          db 'xxxx:xxxx'
  369.               db CR,LF
  370.               db 'Attribut des Devices:       '
  371. l004          db 'xxxxh'
  372.               db CR,LF
  373. GETLENGTH ShowDeviceMSG2
  374.  
  375. CONDeviceError db 'Fehler: CON-Device nicht gefunden!'
  376.                db CR,LF
  377. GETLENGTH ConDeviceError
  378.  
  379.  
  380. NULDeviceError db 'Fehler: NUL-Device nicht gefunden!'
  381.                db CR,LF
  382. GETLENGTH NULdeviceError
  383.  
  384. ShowDevices:
  385.          WRITE_STRING ShowDeviceMSG0
  386.  
  387.          mov si,offset ConDeviceName
  388.          call SearchCharDevice
  389.          jnc >l1
  390.          WRITE_STRING ConDeviceError
  391.          jmp >l2
  392. l1:
  393.          push ax
  394.          mov ax,es
  395.          mov es,cs
  396.          mov di,offset l001
  397.          call Konvert_AX_To_Hexstring
  398.          mov ax,bx
  399.          inc di
  400.          call Konvert_AX_To_Hexstring
  401.          pop ax
  402.          mov di,offset l002
  403.          call Konvert_AX_To_Hexstring
  404.          WRITE_STRING ShowDeviceMSG1
  405.  
  406. l2:
  407.          mov si,offset NulDeviceName
  408.          call SearchCharDevice
  409.          jnc >l1
  410.          WRITE_STRING NulDeviceError
  411.          jmp >l2
  412. l1:
  413.          push ax
  414.          mov ax,es
  415.          mov es,cs
  416.          mov di,offset l003
  417.          call Konvert_AX_To_Hexstring
  418.          mov ax,bx
  419.          inc di
  420.          call Konvert_AX_To_Hexstring
  421.          pop ax
  422.          mov di,offset l004
  423.          call Konvert_AX_To_Hexstring
  424.          WRITE_STRING ShowDeviceMSG2
  425. l2:
  426.          ret
  427.  
  428. ; ----------------------------
  429. ; ShowLogLws
  430. ;
  431. ; Funktion:  Ausgabe der Belegungs-Art aller belegten Laufwerke
  432. ;
  433. ShowLogLwMSG db CR,LF
  434.              db 'Belegungs-Art der belegten Laufwerke: '
  435.              db CR,LF
  436. GETLENGTH ShowLogLwMSG
  437.  
  438. ShowLogLine  db CR,LF
  439.              db 'Laufwerk '
  440. _l006        db          'x: -> '
  441. GETLENGTH ShowLogLine
  442.  
  443. _physical    db 'physikalisch'
  444. _Subst       db 'SUBST       '
  445. _Join        db 'JOIN        '
  446. _Network     db 'NETWORK     '
  447. _IFS         db 'IFS         '
  448. _Unknown     db 'unbekannt   '
  449. L007         EQU $ - Offset _Unknown
  450.  
  451. ShowLogLws:
  452.          WRITE_STRING ShowLogLwMSG
  453.  
  454.          GetDIBAdress
  455.          mov al,es:DIB_LogicalLWs       ; AL = letztes log. Laufwerk
  456.          xor ah,ah
  457.          mov cx,ax            ; CX = max. mögliche Anzahl log. Laufwerke
  458.          mov es,cs
  459.  
  460.          mov ax,1
  461.          mov bl,'A'
  462. l0:
  463.          push cx
  464.          push ax
  465.          push bx
  466.          mov _l006,bl         ; Laufwerks-Bezeichner eintragen
  467.          call GetDriveArt     ; Laufwerks-Art ermitteln
  468.          jc >l2               ; sollte nicht vorkommen!
  469.  
  470.                               ; Meldung ermitteln
  471.          or ax,ax
  472.          jz >l10              ; log. Laufwerk nicht belegt
  473.  
  474.          mov dx,offset _physical
  475.          cmp ax,04000h
  476.          je >l1
  477.  
  478.          mov dx,offset _subst
  479.          cmp ax,05000h
  480.          je >l1
  481.  
  482.          mov dx,offset _join
  483.          cmp ax,06000h
  484.          je >l1
  485.  
  486.          mov dx,offset _network
  487.          cmp ax,08000h
  488.          je >l1
  489.  
  490.          mov dx,offset _ifs   ; nur bei 4.xx möglich!
  491.          cmp ax,0C000h
  492.          je >l1
  493.  
  494.          mov dx,offset _unknown
  495. l1:
  496.          push dx
  497.          WRITE_STRING ShowLogLine
  498.          pop dx
  499.          mov cx,L007
  500.          mov bx,01h
  501.          mov ah,040h
  502.          int 021h
  503. l10:
  504.          pop bx
  505.          pop ax
  506.          pop cx
  507.  
  508.          inc ax
  509.          inc bx
  510.          loop l0
  511.  
  512. l2:
  513.          call ShowCR_LF
  514.          ret
  515.  
  516. ; ----------------------------
  517. ; ShowConfigData
  518. ;
  519. ; Funktion:  Gibt einige Daten aus der CONFIG-Datei aus
  520. ;
  521. ConfigData db CR,LF
  522.            db 'Daten einiger CONFIG-Befehle: '
  523.            db CR,LF
  524.            db CR,LF
  525.            db 'BUFFERS   = '
  526. l002       db             '?????'
  527.            db CR,LF
  528.            db 'FILES     = '
  529. l003       db             '????? (belegt: '
  530. l0031      db                            '?????)'
  531.            db CR,LF
  532.            db 'FCBS      = '
  533. l004       db             '?????,?????'
  534.            db CR,LF
  535.            db 'LASTDRIVE = '
  536. l005       db             '?:'
  537.            db CR,LF
  538. GETLENGTH ConfigData
  539.  
  540. ShowConfigData:
  541.          call CountBuffers
  542.          mov di,offset l002
  543.          call Konvert_AX_To_Dezstring
  544.  
  545.          call CountSDL
  546.          push ax
  547.          mov ax,cx
  548.          mov di,offset l003
  549.          call Konvert_AX_To_Dezstring
  550.          pop ax
  551.          mov di,offset l0031
  552.          call Konvert_AX_To_Dezstring
  553.  
  554.          call CountFCBs
  555.          push ax
  556.          mov ax,cx
  557.          mov di,offset l004
  558.          call Konvert_AX_To_Dezstring
  559.          inc di
  560.          pop ax
  561.          call Konvert_AX_To_Dezstring
  562.  
  563.          GetDIBAdress
  564.          mov al,es:DIB_LogicalLWs       ; AL = letztes log. Laufwerk
  565.          add al,'@'
  566.          mov l005,al
  567.  
  568.          mov es,ds
  569.          WRITE_STRING ConfigData
  570.          ret
  571.  
  572. ; ----------------------------
  573. ; ExpandHandleTab
  574. ;
  575. ; Funktion:  Vergrößert die lokale Handle-Tabelle auf 40 Einträge
  576. ;
  577. ExpandHandleTabMSG db CR,LF
  578.                    db 'Vergrößere die lokale Handle-Tabelle auf 40 Einträge'
  579.                    db CR,LF
  580.                    db '(wird von der internen Routine auf 41 gerundet!)'
  581.                    db CR,LF
  582. GETLENGTH ExpandHandleTabMSG
  583.  
  584. ExpandHandleTabError db CR,LF
  585.                      db 'Fehler: Konnte die Handle-Tabelle nicht erweitern!'
  586.                      db CR,LF
  587. GETLENGTH ExpandHandleTabError
  588.  
  589. ExpandHandleTab:
  590.          WRITE_STRING ExpandHandleTabMSG
  591.          mov bx,040xD
  592.          call SetMaxFile
  593.          jnc >l1
  594.          WRITE_STRING ExpandHandleTabError
  595.          stc
  596. l1:
  597.          ret
  598.  
  599. ; ----------------------------
  600. ; ShowHandleTab
  601. ;
  602. ; Funktion:  Ausgabe der lokalen Handle-Tabelle
  603. ;
  604. LokalHandleTab db CR,LF
  605.                db 'Daten der lokalen Handle-Tabelle: '
  606.                db CR,LF
  607.                db 'max. mögliche Anzahl von Einträgen: '
  608. _l000          db                                     '???'
  609.                db CR,LF
  610.                db 'Anzahl der belegten Einträge: '
  611. _l001          db                               '???'
  612.                db CR,LF
  613. GETLENGTH LokalHandleTab
  614.  
  615. ShowHandleTab:
  616.          call GetMaxFile
  617.          mov di,offset _l001
  618.          call Konvert_AL_To_Dezstring
  619.          mov ax,cx
  620.          mov di,offset _l000
  621.          call Konvert_AL_To_Dezstring
  622.          WRITE_STRING LokalHandleTab
  623.          ret
  624.  
  625. ; ----------------------------
  626. ; CheckSTDIN_STDOUT
  627. ;
  628. ; Funktion:  Überprüft ob die Ein- oder Ausgabe umgeleitet ist
  629. ;
  630. Stdin1   db 'Die Standard-Eingabe ist umgeleitet.'
  631.          db CR,LF
  632. GETLENGTH StdIn1
  633.  
  634. Stdin2   db 'Die Standard-Eingabe ist nicht umgeleitet.'
  635.          db CR,LF
  636. GETLENGTH StdIn2
  637.  
  638. StdOut1  db 'Die Standard-Ausgabe ist umgeleitet.'
  639.          db CR,LF
  640. GETLENGTH StdOut1
  641.  
  642. StdOut2  db 'Die Standard-Ausgabe ist nicht umgeleitet.'
  643.          db CR,LF
  644. GETLENGTH STdOut2
  645.  
  646. Stdin3   db 'Sie kommt aus der Datei/dem Gerät >>'
  647. StdIn_   db '                <<'
  648.          db CR,LF
  649. GETLENGTH StdIn3
  650.  
  651. Stdout3  db 'Sie geht auf die Datei/das Gerät >>'
  652. StdOut_  db '                <<'
  653.          db CR,LF
  654. GETLENGTH STDOut3
  655.  
  656.  
  657. CheckSTDIN_STDOUT:
  658.                               ; Name von STDIN und STDOUT ermitteln
  659.          mov di,offset StdIn_
  660.          mov bx,0             ; 0 = Handle für STDIN
  661.          call GetHandleName
  662.  
  663.          mov di,offset StdOut_
  664.          mov bx,01            ; 1 = Handle für STDOUT
  665.          call GetHandleName
  666.  
  667.          call StandardIO?     ; STDIN/STDOUT umgeleitet?
  668.  
  669.          push ax
  670.  
  671.          mov dx,offset StdIn2
  672.          mov cx,StdIn2_LENGTH
  673.          cmp al,1
  674.          je >l1
  675.          mov dx,offset StdIn1
  676.          mov cx,StdIn1_LENGTH
  677. l1:
  678.          mov bx,01h
  679.          mov ah,040h
  680.          int 021h
  681.  
  682.          mov dx,offset StdIn3
  683.          mov cx,StDin3_LENGTH
  684.          mov ah,040h
  685.          int 021h
  686.  
  687.          pop ax
  688.          xchg ah,al
  689.  
  690.          mov dx,offset StdOut2
  691.          mov cx,StdOut2_LENGTH
  692.          cmp al,1
  693.          je >l1
  694.          mov dx,offset StdOut1
  695.          mov cx,StdOut1_LENGTH
  696. l1:
  697.          mov bx,01h
  698.          mov ah,040h
  699.          int 021h
  700.  
  701.          mov dx,offset StdOut3
  702.          mov cx,StdOut3_LENGTH
  703.          mov ah,040h
  704.          int 021h
  705.          ret
  706.  
  707.